iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

內文

在前一天,我們已經手刻了一個簡單的 JWT 工具類別,從 Header / Payload / Signature 的組裝到 HMAC-SHA256 簽名 的驗證,一步步看見了 JWT 的運作方式。

這樣的學習方式能夠幫助我們理解 JWT 的底層邏輯,但如果要在真實專案裡運作,通常沒有人會真的手寫所有細節。

就我所理解的,在實務上,我們會使用 已經成熟、被廣泛使用的 JWT 套件,這樣能確保:

  • 安全性更高(避免我們在編碼、演算法細節上踩坑)
  • 開發效率更快(幾行程式就能生成或驗證 Token)
  • 功能更完整(例如內建支援過期時間、非對稱加密 RSA/ECDSA、角色權限 claim 等)

這個基本上,在不同的程式語言都會有支援的套件,像是python就有PyJWT等,只要去找,五相信就能找到不同的。在這篇文章中,我們主要介紹的是Java提供的兩種套件,讓大家理解這兩個套件以及針對自己的需求去使用。

在 Java 生態系中,最常見的套件有兩個:

  1. jjwt (Java JWT: JSON Web Token for Java and Android)
  2. java-jwt (Auth0 提供的 Java JWT 套件)

1. JWT 的定位與官方資源

JWT 是什麼?

前幾天已經介紹過,JWT(JSON Web Token)就是由 IETF RFC 7519 規範的標準,目的是 在兩方之間安全地傳輸 JSON 格式的訊息

在 GitHub 上,有一個整理各種語言 JWT 實作的專案:jwt.io 也會被頻繁引用。

在 jwt.io 官方網站 你甚至可以直接貼上 Token,馬上解碼出 Header 與 Payload(當然不包含驗證)。

功能特點:

  • 跨語言(Java、Python、Node.js、Go、.NET 幾乎都有套件)
  • 結構清楚(Header.Payload.Signature)
  • 適合用於:身份驗證、授權、資訊安全傳遞

2. jjwt(由 jwtk 提供)

GitHub 專案連結 → jwtk/jjwt

這個專案的維護團隊就是 jwt.io 的主要貢獻者之一,因此它被視為 Java 世界裡 最標準、最直觀的 JWT 實作

套件特色(摘自 GitHub 說明):

  • 支援 JWS(簽名)與 JWE(加密)
  • API 設計直觀,像是「宣告式」地寫出 Token 要包含哪些資訊
  • 支援多種演算法:HS256、RS256、ES256...
  • 社群活躍,文件與討論都比較豐富

使用方式概念:

  • 生成 TokenJwts.builder() → 設定 subclaimsiatexp.signWith(key).compact()
  • 驗證 TokenJwts.parserBuilder().setSigningKey(key).parseClaimsJws(token)

從 GitHub 的範例來看,它的 API 結構幾乎就是在「寫一份 Token 說明書」,非常直觀。

3. java-jwt(由 Auth0 提供)

GitHub 專案連結 → auth0/java-jwt

這個套件由 Auth0(身份驗證平台公司) 維護,它的定位是更 企業級 的 JWT 解決方案。

套件特色(摘自 GitHub 說明):

  • 支援所有標準 JWT claims(sub, iss, exp, iat...)
  • 支援自訂 claims(例如 role、permission)
  • 提供 JWTVerifier 驗證器:可以設定額外條件(例如必須有特定 subject,或是 token 來自指定 issuer)
  • API 鏈式設計,適合喜歡 fluent style 的 Java 開發者
  • 和 Auth0 平台緊密整合,在大型 SaaS 專案裡使用非常普遍

使用方式概念:

  • 生成 TokenJWT.create().withSubject("xxx").withClaim("role", "admin").sign(algorithm)
  • 驗證 TokenJWT.require(algorithm).withSubject("xxx").build().verify(token)

從 GitHub 的範例來看,它更強調「驗證條件」,不像 jjwt 那麼直白。


4. jjwt vs java-jwt 差異比較

特色 jjwt java-jwt
維護團隊 jwtk,JWT 標準社群 Auth0,身份驗證平台公司
API 風格 宣告式(builder + parser) 鏈式呼叫(create + verifier)
功能 JWS + JWE(簽名 + 加密) 主要偏向 JWS(簽名),與 Auth0 平台結合更強
驗證機制 直接用 key 驗證簽名、解析 claims Verifier 機制,可加上條件限制
適合對象 學習、Demo、小型專案 大型專案、需要更嚴謹驗證邏輯
文件/社群 文件清楚、範例完整 文件專業、與 SaaS 生態相連結

5. 結論與延伸

  • Day 10:我們親手實作了 JWT,理解了它的本質(Base64 + HMAC-SHA256)。
  • Day 11:我們認識了兩個常見 Java JWT 套件:
    • jjwt → 社群標準、簡單易用
    • java-jwt → 企業級、驗證機制強大
  • 延伸思考
    • 如果只是做 Side Project 或教學,jjwt 就足夠了。
    • 如果是企業專案,尤其是和 Auth0 或 OAuth 生態系統 整合,java-jwt 會是更佳選擇。

今天我們展示了「寫程式碼」與「用套件」之間的差異:

  • 手刻 JWT(Day 10) → 幫助我們理解原理
  • 使用套件(Day 11) → 幫助我們快速安全落地

接下來,我們會把這些套件和 Spring Security 整合,讓驗證邏輯變得更簡單、更模組化。

大家明天見!


上一篇
Day 10 Java 手動實作 JWT
系列文
「站住 口令 誰」關於資安權限與授權的觀念教學,以Spring boot Security框架實作11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言